上电复位 ↓ 硬

🔍 溯源 ✍️ Jack | 📅 2025-04-27 | 👍 2 | 原帖↗
#知识星球 #立芯嵌入式 #来源/立芯星球 #技术/启动流程 #技术/Bootloader #质量/精华

原帖 | Jack | 2025-04-27 00:52 | 👍2 | 阅读约1

上电复位

硬件复位初始化:复位寄存器值、外设恢复默认状态(如关闭外设时钟)

执行BootROM(厂商芯片流片时固化的一段代码)
├─→ 初始化基础时钟(如切换到HSI内部时钟)
├─→ 初始化必要外设(如Flash控制器、调试串口)
├─→ 检测启动模式(通过BOOT引脚或选项字节)
│ ├─→ 从内部Flash(0×08000000)启动:直接跳转至用户程序起始地址
│ └─→ 从系统存储器(System Memory)启动:执行厂商Bootloader(如STM32的USB DFU)
│ └─→ 从RAM启动(0x20000000)(三种启动方式的讨论见BOOT的三种启动方式里面,系统存储器模式是从内部ROM中的出厂代码启动

从内部Flash启动:加载用户Bootloader(若有)
├─→ 从内部Flash/外部存储介质读取用户Bootloader到RAM或直接执行
├─→ 用户Bootloader执行:
│ ├─→ 高级时钟配置(如PLL倍频到主频)
│ ├─→ 外设深度初始化(如以太网、文件系统)
│ ├─→ 固件更新检测(OTA、USB/UART通信)
│ └─→ 跳转至应用程序复位向量(即main()的上级入口)

执行应用程序的启动代码(startup_xxx.s)
├─→ 初始化C语言环境(如复制.data段、清零.bss段)
├─→ 调用库初始化(如ARM的__main)
└─→ 最终跳转至main()函数


相关笔记